﻿using System;
using System.Threading.Tasks;
using Orleans;
using Orleans.Runtime;

namespace Sample.Interfaces
{
    public interface INewsReminderGrain : IGrainWithIntegerKey, IRemindable
    {
        /// <summary>
        /// 启动一个提醒
        /// 
        /// 新增或者修改
        /// </summary>
        /// <param name="reminderName"></param>
        /// <param name="p"></param>
        /// <returns></returns>
        Task<IGrainReminder> StartReminder(string reminderName, TimeSpan? p = null);

        /// <summary>
        /// 删除一个提醒
        /// </summary>
        /// <param name="reminder"></param>
        /// <returns></returns>
        Task RemoveReminder(string reminder);

        /// <summary>
        /// 注册一个定时器
        /// 
        /// 如果激活被停用或发生故障，计时器停止运行并不重要（或不希望发生）
        /// 计时器的分辨率很小（例如，以秒或分钟为单位的合理表示）。
        /// 计时器回调可以从Grain.OnActivateAsync调用grain方法时启动，也可以在调用grain方法时启动
        /// </summary>
        /// <returns></returns>
        Task RegisterTimerTask();
    }
}